home *** CD-ROM | disk | FTP | other *** search
/ The Complete Utilities To…ka 501 Killer Utilities! / 501 Killer Utilities! (Macworld July 1995).cdr / Programming / OutOfPhase1.1 Source / OutOfPhase Folder / TrackAttributeDialog.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-19  |  63.0 KB  |  1,868 lines  |  [TEXT/KAHL]

  1. /* TrackAttributeDialog.c */
  2. /*****************************************************************************/
  3. /*                                                                           */
  4. /*    Out Of Phase:  Digital Music Synthesis on General Purpose Computers    */
  5. /*    Copyright (C) 1994  Thomas R. Lawrence                                 */
  6. /*                                                                           */
  7. /*    This program is free software; you can redistribute it and/or modify   */
  8. /*    it under the terms of the GNU General Public License as published by   */
  9. /*    the Free Software Foundation; either version 2 of the License, or      */
  10. /*    (at your option) any later version.                                    */
  11. /*                                                                           */
  12. /*    This program is distributed in the hope that it will be useful,        */
  13. /*    but WITHOUT ANY WARRANTY; without even the implied warranty of         */
  14. /*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          */
  15. /*    GNU General Public License for more details.                           */
  16. /*                                                                           */
  17. /*    You should have received a copy of the GNU General Public License      */
  18. /*    along with this program; if not, write to the Free Software            */
  19. /*    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.              */
  20. /*                                                                           */
  21. /*    Thomas R. Lawrence can be reached at tomlaw@world.std.com.             */
  22. /*                                                                           */
  23. /*****************************************************************************/
  24.  
  25. #include "MiscInfo.h"
  26. #include "Audit.h"
  27. #include "Debug.h"
  28. #include "Definitions.h"
  29.  
  30. #include "TrackAttributeDialog.h"
  31. #include "Screen.h"
  32. #include "Memory.h"
  33. #include "Alert.h"
  34. #include "TextEdit.h"
  35. #include "SimpleButton.h"
  36. #include "TrackObject.h"
  37. #include "Main.h"
  38. #include "WrapTextBox.h"
  39. #include "Numbers.h"
  40. #include "RadioButton.h"
  41. #include "NoteObject.h"
  42.  
  43.  
  44. #define WINXSIZE (490)
  45.  
  46. #define INDENTVALUE (90)
  47.  
  48. #define DESCRIPTIONX (10)
  49. #define DESCRIPTIONY (6)
  50. #define DESCRIPTIONWIDTH (WINXSIZE - DESCRIPTIONX - DESCRIPTIONX)
  51. #define DESCRIPTIONHEIGHT (15)
  52.  
  53. #define NAMEPROMPTX (10)
  54. #define NAMEPROMPTY (DESCRIPTIONY + DESCRIPTIONHEIGHT + 10)
  55.  
  56. #define NAMEEDITX (NAMEPROMPTX + INDENTVALUE)
  57. #define NAMEEDITY (NAMEPROMPTY - 3)
  58. #define NAMEEDITWIDTH (160)
  59. #define NAMEEDITHEIGHT (19)
  60.  
  61. #define INSTRPROMPTX (NAMEPROMPTX)
  62. #define INSTRPROMPTY (NAMEPROMPTY + NAMEEDITHEIGHT + 3)
  63.  
  64. #define INSTREDITX (INSTRPROMPTX + INDENTVALUE)
  65. #define INSTREDITY (INSTRPROMPTY - 3)
  66. #define INSTREDITWIDTH (NAMEEDITWIDTH)
  67. #define INSTREDITHEIGHT (NAMEEDITHEIGHT)
  68.  
  69. #define EARLYLATEADJUSTPROMPTX (10)
  70. #define EARLYLATEADJUSTPROMPTY (INSTRPROMPTY + INSTREDITHEIGHT + 3 + 5)
  71.  
  72. #define EARLYLATEADJUSTEDITX (EARLYLATEADJUSTPROMPTX + INDENTVALUE)
  73. #define EARLYLATEADJUSTEDITY (EARLYLATEADJUSTPROMPTY - 3)
  74. #define EARLYLATEADJUSTEDITWIDTH (80)
  75. #define EARLYLATEADJUSTEDITHEIGHT (NAMEEDITHEIGHT)
  76.  
  77. #define RELEASEPOINT1PROMPTX (EARLYLATEADJUSTEDITX + EARLYLATEADJUSTEDITWIDTH + 10)
  78. #define RELEASEPOINT1PROMPTY (EARLYLATEADJUSTPROMPTY)
  79.  
  80. #define RELEASEPOINT1EDITX (RELEASEPOINT1PROMPTX + INDENTVALUE)
  81. #define RELEASEPOINT1EDITY (EARLYLATEADJUSTEDITY)
  82. #define RELEASEPOINT1WIDTH (EARLYLATEADJUSTEDITWIDTH)
  83. #define RELEASEPOINT1HEIGHT (NAMEEDITHEIGHT)
  84.  
  85. #define RELEASEPOINT1STARTBUTTONX (RELEASEPOINT1EDITX + RELEASEPOINT1WIDTH + 5)
  86. #define RELEASEPOINT1STARTBUTTONY (RELEASEPOINT1EDITY)
  87. #define RELEASEPOINT1STARTBUTTONWIDTH (50)
  88. #define RELEASEPOINT1STARTBUTTONHEIGHT (NAMEEDITHEIGHT)
  89.  
  90. #define RELEASEPOINT1ENDBUTTONX (RELEASEPOINT1STARTBUTTONX\
  91.                     + RELEASEPOINT1STARTBUTTONWIDTH + 5)
  92. #define RELEASEPOINT1ENDBUTTONY (RELEASEPOINT1STARTBUTTONY)
  93. #define RELEASEPOINT1ENDBUTTONWIDTH (RELEASEPOINT1STARTBUTTONWIDTH)
  94. #define RELEASEPOINT1ENDBUTTONHEIGHT (RELEASEPOINT1STARTBUTTONHEIGHT)
  95.  
  96. #define LOUDNESSPROMPTX (EARLYLATEADJUSTPROMPTX)
  97. #define LOUDNESSPROMPTY (EARLYLATEADJUSTPROMPTY + EARLYLATEADJUSTEDITHEIGHT - 1)
  98.  
  99. #define LOUDNESSEDITX (LOUDNESSPROMPTX + INDENTVALUE)
  100. #define LOUDNESSEDITY (LOUDNESSPROMPTY - 3)
  101. #define LOUDNESSEDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  102. #define LOUDNESSEDITHEIGHT (NAMEEDITHEIGHT)
  103.  
  104. #define RELEASEPOINT2PROMPTX (LOUDNESSEDITX + LOUDNESSEDITWIDTH + 10)
  105. #define RELEASEPOINT2PROMPTY (LOUDNESSPROMPTY)
  106.  
  107. #define RELEASEPOINT2EDITX (RELEASEPOINT2PROMPTX + INDENTVALUE)
  108. #define RELEASEPOINT2EDITY (LOUDNESSEDITY)
  109. #define RELEASEPOINT2EDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  110. #define RELEASEPOINT2EDITHEIGHT (NAMEEDITHEIGHT)
  111.  
  112. #define RELEASEPOINT2STARTBUTTONX (RELEASEPOINT2EDITX + RELEASEPOINT2EDITWIDTH + 5)
  113. #define RELEASEPOINT2STARTBUTTONY (RELEASEPOINT2EDITY)
  114. #define RELEASEPOINT2STARTBUTTONWIDTH (RELEASEPOINT1STARTBUTTONWIDTH)
  115. #define RELEASEPOINT2STARTBUTTONHEIGHT (NAMEEDITHEIGHT)
  116.  
  117. #define RELEASEPOINT2ENDBUTTONX (RELEASEPOINT2STARTBUTTONX\
  118.                     + RELEASEPOINT2STARTBUTTONWIDTH + 5)
  119. #define RELEASEPOINT2ENDBUTTONY (RELEASEPOINT2STARTBUTTONY)
  120. #define RELEASEPOINT2ENDBUTTONWIDTH (RELEASEPOINT2STARTBUTTONWIDTH)
  121. #define RELEASEPOINT2ENDBUTTONHEIGHT (RELEASEPOINT2STARTBUTTONHEIGHT)
  122.  
  123. #define ACCENT1PROMPTX (EARLYLATEADJUSTPROMPTX)
  124. #define ACCENT1PROMPTY (RELEASEPOINT2PROMPTY + RELEASEPOINT2EDITHEIGHT - 1)
  125.  
  126. #define ACCENT1EDITX (ACCENT1PROMPTX + INDENTVALUE)
  127. #define ACCENT1EDITY (ACCENT1PROMPTY - 3)
  128. #define ACCENT1EDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  129. #define ACCENT1EDITHEIGHT (NAMEEDITHEIGHT)
  130.  
  131. #define ACCENT2PROMPTX (ACCENT1EDITX + ACCENT1EDITWIDTH + 10)
  132. #define ACCENT2PROMPTY (ACCENT1PROMPTY)
  133.  
  134. #define ACCENT2EDITX (ACCENT2PROMPTX + INDENTVALUE)
  135. #define ACCENT2EDITY (ACCENT1EDITY)
  136. #define ACCENT2EDITWIDTH (ACCENT1EDITWIDTH)
  137. #define ACCENT2EDITHEIGHT (NAMEEDITHEIGHT)
  138.  
  139. #define ACCENT3PROMPTX (EARLYLATEADJUSTPROMPTX)
  140. #define ACCENT3PROMPTY (ACCENT2PROMPTY + ACCENT2EDITHEIGHT - 1)
  141.  
  142. #define ACCENT3EDITX (ACCENT3PROMPTX + INDENTVALUE)
  143. #define ACCENT3EDITY (ACCENT3PROMPTY - 3)
  144. #define ACCENT3EDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  145. #define ACCENT3EDITHEIGHT (NAMEEDITHEIGHT)
  146.  
  147. #define ACCENT4PROMPTX (ACCENT3EDITX + ACCENT3EDITWIDTH + 10)
  148. #define ACCENT4PROMPTY (ACCENT3PROMPTY)
  149.  
  150. #define ACCENT4EDITX (ACCENT4PROMPTX + INDENTVALUE)
  151. #define ACCENT4EDITY (ACCENT4PROMPTY - 3)
  152. #define ACCENT4EDITWIDTH (ACCENT3EDITWIDTH)
  153. #define ACCENT4EDITHEIGHT (NAMEEDITHEIGHT)
  154.  
  155. #define PITCHDISPRATEPROMPTX (EARLYLATEADJUSTPROMPTX)
  156. #define PITCHDISPRATEPROMPTY (ACCENT4PROMPTY + ACCENT4EDITHEIGHT - 1)
  157.  
  158. #define PITCHDISPRATEEDITX (PITCHDISPRATEPROMPTX + INDENTVALUE)
  159. #define PITCHDISPRATEEDITY (PITCHDISPRATEPROMPTY - 3)
  160. #define PITCHDISPRATEEDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  161. #define PITCHDISPRATEEDITHEIGHT (NAMEEDITHEIGHT)
  162.  
  163. #define PITCHDISPDEPTHPROMPTX (PITCHDISPRATEEDITX + PITCHDISPRATEEDITWIDTH + 10)
  164. #define PITCHDISPDEPTHPROMPTY (PITCHDISPRATEPROMPTY)
  165.  
  166. #define PITCHDISPDEPTHEDITX (PITCHDISPDEPTHPROMPTX + INDENTVALUE)
  167. #define PITCHDISPDEPTHEDITY (PITCHDISPDEPTHPROMPTY - 3)
  168. #define PITCHDISPDEPTHEDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  169. #define PITCHDISPDEPTHEDITHEIGHT (NAMEEDITHEIGHT)
  170.  
  171. #define HURRYUPPROMPTX (EARLYLATEADJUSTPROMPTX)
  172. #define HURRYUPPROMPTY (PITCHDISPDEPTHPROMPTY + PITCHDISPDEPTHEDITHEIGHT - 1)
  173.  
  174. #define HURRYUPEDITX (HURRYUPPROMPTX + INDENTVALUE)
  175. #define HURRYUPEDITY (HURRYUPPROMPTY - 3)
  176. #define HURRYUPEDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  177. #define HURRYUPEDITHEIGHT (NAMEEDITHEIGHT)
  178.  
  179. #define PITCHDISPSTARTPROMPTX (HURRYUPEDITX + HURRYUPEDITWIDTH + 10)
  180. #define PITCHDISPSTARTPROMPTY (HURRYUPPROMPTY)
  181.  
  182. #define PITCHDISPSTARTEDITX (PITCHDISPSTARTPROMPTX + INDENTVALUE)
  183. #define PITCHDISPSTARTEDITY (PITCHDISPSTARTPROMPTY - 3)
  184. #define PITCHDISPSTARTEDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  185. #define PITCHDISPSTARTEDITHEIGHT (NAMEEDITHEIGHT)
  186.  
  187. #define PITCHDISPSTARTSTARTBUTTONX (PITCHDISPSTARTEDITX + PITCHDISPSTARTEDITWIDTH + 5)
  188. #define PITCHDISPSTARTSTARTBUTTONY (PITCHDISPSTARTEDITY)
  189. #define PITCHDISPSTARTSTARTBUTTONWIDTH (RELEASEPOINT1STARTBUTTONWIDTH)
  190. #define PITCHDISPSTARTSTARTBUTTONHEIGHT (PITCHDISPSTARTEDITHEIGHT)
  191.  
  192. #define PITCHDISPSTARTENDBUTTONX (PITCHDISPSTARTSTARTBUTTONX\
  193.                     + PITCHDISPSTARTSTARTBUTTONWIDTH + 5)
  194. #define PITCHDISPSTARTENDBUTTONY (PITCHDISPSTARTSTARTBUTTONY)
  195. #define PITCHDISPSTARTENDBUTTONWIDTH (PITCHDISPSTARTSTARTBUTTONWIDTH)
  196. #define PITCHDISPSTARTENDBUTTONHEIGHT (PITCHDISPSTARTSTARTBUTTONHEIGHT)
  197.  
  198. #define STEREOPOSITIONPROMPTX (EARLYLATEADJUSTPROMPTX)
  199. #define STEREOPOSITIONPROMPTY (HURRYUPPROMPTY + HURRYUPEDITHEIGHT - 1)
  200.  
  201. #define STEREOPOSITIONEDITX (STEREOPOSITIONPROMPTX + INDENTVALUE)
  202. #define STEREOPOSITIONEDITY (STEREOPOSITIONPROMPTY - 3)
  203. #define STEREOPOSITIONEDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  204. #define STEREOPOSITIONEDITHEIGHT (NAMEEDITHEIGHT)
  205.  
  206. #define DETUNEPROMPTX (STEREOPOSITIONEDITX + STEREOPOSITIONEDITWIDTH + 10)
  207. #define DETUNEPROMPTY (STEREOPOSITIONPROMPTY)
  208.  
  209. #define DETUNEEDITX (DETUNEPROMPTX + INDENTVALUE)
  210. #define DETUNEEDITY (DETUNEPROMPTY - 3)
  211. #define DETUNEEDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  212. #define DETUNEEDITHEIGHT (NAMEEDITHEIGHT)
  213.  
  214. #define DETUNEHERTZBUTTONX (DETUNEEDITX + DETUNEEDITWIDTH + 5)
  215. #define DETUNEHERTZBUTTONY (DETUNEEDITY)
  216. #define DETUNEHERTZBUTTONWIDTH (RELEASEPOINT1STARTBUTTONWIDTH)
  217. #define DETUNEHERTZBUTTONHEIGHT (DETUNEEDITHEIGHT)
  218.  
  219. #define DETUNEHALFSTEPBUTTONX (DETUNEHERTZBUTTONX + DETUNEHERTZBUTTONWIDTH + 5)
  220. #define DETUNEHALFSTEPBUTTONY (DETUNEHERTZBUTTONY)
  221. #define DETUNEHALFSTEPBUTTONWIDTH (DETUNEHERTZBUTTONWIDTH + 20)
  222. #define DETUNEHALFSTEPBUTTONHEIGHT (DETUNEHERTZBUTTONHEIGHT)
  223.  
  224. #define SURROUNDPOSITIONPROMPTX (EARLYLATEADJUSTPROMPTX)
  225. #define SURROUNDPOSITIONPROMPTY (STEREOPOSITIONPROMPTY + NAMEEDITHEIGHT - 1)
  226.  
  227. #define SURROUNDPOSITIONEDITX (SURROUNDPOSITIONPROMPTX + INDENTVALUE)
  228. #define SURROUNDPOSITIONEDITY (SURROUNDPOSITIONPROMPTY - 3)
  229. #define SURROUNDPOSITIONEDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  230. #define SURROUNDPOSITIONEDITHEIGHT (NAMEEDITHEIGHT)
  231.  
  232. #define DURATIONPROMPTX (SURROUNDPOSITIONEDITX + SURROUNDPOSITIONEDITWIDTH + 10)
  233. #define DURATIONPROMPTY (SURROUNDPOSITIONPROMPTY)
  234.  
  235. #define DURATIONEDITX (DURATIONPROMPTX + INDENTVALUE)
  236. #define DURATIONEDITY (DURATIONPROMPTY - 3)
  237. #define DURATIONEDITWIDTH (EARLYLATEADJUSTEDITWIDTH)
  238. #define DURATIONEDITHEIGHT (NAMEEDITHEIGHT)
  239.  
  240. #define DURATIONADDBUTTONX (DURATIONEDITX + DURATIONEDITWIDTH + 5)
  241. #define DURATIONADDBUTTONY (DURATIONEDITY)
  242. #define DURATIONADDBUTTONWIDTH (RELEASEPOINT1STARTBUTTONWIDTH)
  243. #define DURATIONADDBUTTONHEIGHT (DURATIONEDITHEIGHT)
  244.  
  245. #define DURATIONMULTBUTTONX (DURATIONADDBUTTONX + DURATIONADDBUTTONWIDTH + 5)
  246. #define DURATIONMULTBUTTONY (DURATIONADDBUTTONY)
  247. #define DURATIONMULTBUTTONWIDTH (DURATIONADDBUTTONWIDTH)
  248. #define DURATIONMULTBUTTONHEIGHT (DURATIONADDBUTTONHEIGHT)
  249.  
  250. #define OKBUTTONWIDTH (80)
  251. #define OKBUTTONHEIGHT (21)
  252. #define OKBUTTONY (DURATIONEDITY + DURATIONEDITHEIGHT + 15)
  253. #define OKBUTTONX ((WINXSIZE / 4) - (OKBUTTONWIDTH / 2))
  254.  
  255. #define CANCELBUTTONWIDTH (OKBUTTONWIDTH)
  256. #define CANCELBUTTONHEIGHT (OKBUTTONHEIGHT)
  257. #define CANCELBUTTONY (OKBUTTONY)
  258. #define CANCELBUTTONX (((3 * WINXSIZE) / 4) - (OKBUTTONWIDTH / 2))
  259.  
  260. #define WINYSIZE (CANCELBUTTONY + CANCELBUTTONHEIGHT + 10)
  261.  
  262.  
  263. typedef struct
  264.     {
  265.         WinType*                        ScreenID;
  266.         TextEditRec*                NameEdit;
  267.         TextEditRec*                InstrumentEdit;
  268.         TextEditRec*                EarlyLateAdjustEdit;
  269.         TextEditRec*                ReleasePoint1Edit;
  270.         RadioButtonRec*            ReleasePoint1StartButton;
  271.         RadioButtonRec*            ReleasePoint1EndButton;
  272.         TextEditRec*                LoudnessEdit;
  273.         TextEditRec*                ReleasePoint2Edit;
  274.         RadioButtonRec*            ReleasePoint2StartButton;
  275.         RadioButtonRec*            ReleasePoint2EndButton;
  276.         TextEditRec*                Accent1Edit;
  277.         TextEditRec*                Accent2Edit;
  278.         TextEditRec*                Accent3Edit;
  279.         TextEditRec*                Accent4Edit;
  280.         TextEditRec*                PitchDispRateEdit;
  281.         TextEditRec*                PitchDispDepthEdit;
  282.         TextEditRec*                HurryUpEdit;
  283.         TextEditRec*                PitchDispStartEdit;
  284.         RadioButtonRec*            PitchDispStartStartButton;
  285.         RadioButtonRec*            PitchDispStartEndButton;
  286.         TextEditRec*                StereoPositionEdit;
  287.         TextEditRec*                DetuneEdit;
  288.         RadioButtonRec*            DetuneHertzButton;
  289.         RadioButtonRec*            DetuneHalfStepButton;
  290.         TextEditRec*                SurroundEdit;
  291.         TextEditRec*                DurationEdit;
  292.         RadioButtonRec*            DurationAddButton;
  293.         RadioButtonRec*            DurationMultButton;
  294.         SimpleButtonRec*        OKButton;
  295.         SimpleButtonRec*        CancelButton;
  296.     } WindowRec;
  297.  
  298.  
  299. static void                    UpdateTheWindow(WindowRec* Window)
  300.     {
  301.         CheckPtrExistence(Window);
  302.         TextEditFullRedraw(Window->NameEdit);
  303.         TextEditFullRedraw(Window->InstrumentEdit);
  304.         TextEditFullRedraw(Window->EarlyLateAdjustEdit);
  305.         TextEditFullRedraw(Window->ReleasePoint1Edit);
  306.         RedrawRadioButton(Window->ReleasePoint1StartButton);
  307.         RedrawRadioButton(Window->ReleasePoint1EndButton);
  308.         TextEditFullRedraw(Window->LoudnessEdit);
  309.         TextEditFullRedraw(Window->ReleasePoint2Edit);
  310.         RedrawRadioButton(Window->ReleasePoint2StartButton);
  311.         RedrawRadioButton(Window->ReleasePoint2EndButton);
  312.         TextEditFullRedraw(Window->Accent1Edit);
  313.         TextEditFullRedraw(Window->Accent2Edit);
  314.         TextEditFullRedraw(Window->Accent3Edit);
  315.         TextEditFullRedraw(Window->Accent4Edit);
  316.         TextEditFullRedraw(Window->PitchDispRateEdit);
  317.         TextEditFullRedraw(Window->PitchDispDepthEdit);
  318.         TextEditFullRedraw(Window->HurryUpEdit);
  319.         TextEditFullRedraw(Window->PitchDispStartEdit);
  320.         RedrawRadioButton(Window->PitchDispStartStartButton);
  321.         RedrawRadioButton(Window->PitchDispStartEndButton);
  322.         TextEditFullRedraw(Window->StereoPositionEdit);
  323.         TextEditFullRedraw(Window->DetuneEdit);
  324.         RedrawRadioButton(Window->DetuneHertzButton);
  325.         RedrawRadioButton(Window->DetuneHalfStepButton);
  326.         TextEditFullRedraw(Window->SurroundEdit);
  327.         TextEditFullRedraw(Window->DurationEdit);
  328.         RedrawRadioButton(Window->DurationAddButton);
  329.         RedrawRadioButton(Window->DurationMultButton);
  330.         RedrawSimpleButton(Window->OKButton);
  331.         RedrawSimpleButton(Window->CancelButton);
  332.         SetClipRect(Window->ScreenID,0,0,WINXSIZE,WINYSIZE);
  333.         DrawWrappedTextBox(Window->ScreenID,"Adjust the track's attributes and defaults:",
  334.             GetScreenFont(),9,DESCRIPTIONX,DESCRIPTIONY,DESCRIPTIONWIDTH,DESCRIPTIONHEIGHT);
  335.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Track Name:",11,NAMEPROMPTX,
  336.             NAMEPROMPTY,ePlain);
  337.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Instrument Name:",16,
  338.             INSTRPROMPTX,INSTRPROMPTY,ePlain);
  339.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Hit Time:",9,
  340.             EARLYLATEADJUSTPROMPTX,EARLYLATEADJUSTPROMPTY,ePlain);
  341.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Release 1:",10,
  342.             RELEASEPOINT1PROMPTX,RELEASEPOINT1PROMPTY,ePlain);
  343.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Loudness:",9,
  344.             LOUDNESSPROMPTX,LOUDNESSPROMPTY,ePlain);
  345.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Release 2:",10,
  346.             RELEASEPOINT2PROMPTX,RELEASEPOINT2PROMPTY,ePlain);
  347.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Accent 1:",9,
  348.             ACCENT1PROMPTX,ACCENT1PROMPTY,ePlain);
  349.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Accent 2:",9,
  350.             ACCENT2PROMPTX,ACCENT2PROMPTY,ePlain);
  351.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Accent 3:",9,
  352.             ACCENT3PROMPTX,ACCENT3PROMPTY,ePlain);
  353.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Accent 4:",9,
  354.             ACCENT4PROMPTX,ACCENT4PROMPTY,ePlain);
  355.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Pitch Disp Rate:",16,
  356.             PITCHDISPRATEPROMPTX,PITCHDISPRATEPROMPTY,ePlain);
  357.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Pitch Disp Depth:",17,
  358.             PITCHDISPDEPTHPROMPTX,PITCHDISPDEPTHPROMPTY,ePlain);
  359.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Hurry-Up:",9,
  360.             HURRYUPPROMPTX,HURRYUPPROMPTY,ePlain);
  361.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Pitch Disp Start:",17,
  362.             PITCHDISPSTARTPROMPTX,PITCHDISPSTARTPROMPTY,ePlain);
  363.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Stereo Pos:",11,
  364.             STEREOPOSITIONPROMPTX,STEREOPOSITIONPROMPTY,ePlain);
  365.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Detune:",7,
  366.             DETUNEPROMPTX,DETUNEPROMPTY,ePlain);
  367.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Surround Pos:",13,
  368.             SURROUNDPOSITIONPROMPTX,SURROUNDPOSITIONPROMPTY,ePlain);
  369.         DrawTextLine(Window->ScreenID,GetScreenFont(),9,"Duration Adjust:",16,
  370.             DURATIONPROMPTX,DURATIONPROMPTY,ePlain);
  371.     }
  372.  
  373.  
  374. /* this routine asks the user for the instrument name and track name associated */
  375. /* with a track.  It takes the track object as an argument, so it worries about */
  376. /* the updating and cancelling & all that. */
  377. void                                TrackAttributeDialog(struct TrackObjectRec* TheTrackThing)
  378.     {
  379.         WindowRec*                Window;
  380.         char*                            StringTemp;
  381.         MyBoolean                    LoopFlag;
  382.         TextEditRec*            ActiveTextEdit;
  383.         MyBoolean                    DoItFlag EXECUTE(= -31342);
  384.  
  385.         CheckPtrExistence(TheTrackThing);
  386.  
  387.         Window = (WindowRec*)AllocPtrCanFail(sizeof(WindowRec),"TrackAttributeDialogWindow");
  388.         if (Window == NIL)
  389.             {
  390.              FailurePoint1:
  391.                 AlertHalt("There is not enough memory available to edit the track attributes.",
  392.                     NIL);
  393.                 return;
  394.             }
  395.  
  396.         Window->ScreenID = MakeNewWindow(eModelessDialogWindow,eWindowNotClosable,
  397.             eWindowNotZoomable,eWindowNotResizable,DialogLeftEdge(WINXSIZE),
  398.             DialogTopEdge(WINYSIZE),WINXSIZE,WINYSIZE,(void (*)(void*))&UpdateTheWindow,Window);
  399.         if (Window->ScreenID == NIL)
  400.             {
  401.              FailurePoint2:
  402.                 ReleasePtr((char*)Window);
  403.                 goto FailurePoint1;
  404.             }
  405.         SetWindowName(Window->ScreenID,"Edit Track Defaults");
  406.  
  407.         Window->NameEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,GetScreenFont(),9,
  408.             NAMEEDITX,NAMEEDITY,NAMEEDITWIDTH,NAMEEDITHEIGHT);
  409.         if (Window->NameEdit == NIL)
  410.             {
  411.              FailurePoint3:
  412.                 KillWindow(Window->ScreenID);
  413.                 goto FailurePoint2;
  414.             }
  415.         StringTemp = TrackObjectGetNameCopy(TheTrackThing);
  416.         if (StringTemp == NIL)
  417.             {
  418.              FailurePoint4:
  419.                 DisposeTextEdit(Window->NameEdit);
  420.                 goto FailurePoint3;
  421.             }
  422.         TextEditNewRawData(Window->NameEdit,StringTemp,SYSTEMLINEFEED);
  423.         ReleasePtr(StringTemp);
  424.         TextEditHasBeenSaved(Window->NameEdit);
  425.  
  426.         Window->InstrumentEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,
  427.             GetScreenFont(),9,INSTREDITX,INSTREDITY,INSTREDITWIDTH,INSTREDITHEIGHT);
  428.         if (Window->InstrumentEdit == NIL)
  429.             {
  430.              FailurePoint5:
  431.                 goto FailurePoint4;
  432.             }
  433.         StringTemp = TrackObjectGetInstrName(TheTrackThing);
  434.         if (StringTemp == NIL)
  435.             {
  436.              FailurePoint6:
  437.                 DisposeTextEdit(Window->InstrumentEdit);
  438.                 goto FailurePoint5;
  439.             }
  440.         TextEditNewRawData(Window->InstrumentEdit,StringTemp,SYSTEMLINEFEED);
  441.         ReleasePtr(StringTemp);
  442.         TextEditHasBeenSaved(Window->InstrumentEdit);
  443.  
  444.         Window->OKButton = NewSimpleButton(Window->ScreenID,"OK",OKBUTTONX,OKBUTTONY,
  445.             OKBUTTONWIDTH,OKBUTTONHEIGHT);
  446.         if (Window->OKButton == NIL)
  447.             {
  448.              FailurePoint7:
  449.                 goto FailurePoint6;
  450.             }
  451.         SetDefaultButtonState(Window->OKButton,True);
  452.  
  453.         Window->CancelButton = NewSimpleButton(Window->ScreenID,"Cancel",CANCELBUTTONX,
  454.             CANCELBUTTONY,CANCELBUTTONWIDTH,CANCELBUTTONHEIGHT);
  455.         if (Window->CancelButton == NIL)
  456.             {
  457.              FailurePoint8:
  458.                 DisposeSimpleButton(Window->OKButton);
  459.                 goto FailurePoint7;
  460.             }
  461.  
  462.         Window->EarlyLateAdjustEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,
  463.             GetScreenFont(),9,EARLYLATEADJUSTEDITX,EARLYLATEADJUSTEDITY,
  464.             EARLYLATEADJUSTEDITWIDTH,EARLYLATEADJUSTEDITHEIGHT);
  465.         if (Window->EarlyLateAdjustEdit == NIL)
  466.             {
  467.              FailurePoint9:
  468.                 DisposeSimpleButton(Window->CancelButton);
  469.                 goto FailurePoint8;
  470.             }
  471.         StringTemp = LongDoubleToString(TrackObjectGetEarlyLateAdjust(TheTrackThing),
  472.             7,1e-4,1e6);
  473.         if (StringTemp == NIL)
  474.             {
  475.              FailurePoint10:
  476.                 DisposeTextEdit(Window->EarlyLateAdjustEdit);
  477.                 goto FailurePoint9;
  478.             }
  479.         TextEditNewRawData(Window->EarlyLateAdjustEdit,StringTemp,SYSTEMLINEFEED);
  480.         ReleasePtr(StringTemp);
  481.         TextEditHasBeenSaved(Window->EarlyLateAdjustEdit);
  482.  
  483.         Window->ReleasePoint1Edit = NewTextEdit(Window->ScreenID,eTENoScrollBars,
  484.             GetScreenFont(),9,RELEASEPOINT1EDITX,RELEASEPOINT1EDITY,RELEASEPOINT1WIDTH,
  485.             RELEASEPOINT1HEIGHT);
  486.         if (Window->ReleasePoint1Edit == NIL)
  487.             {
  488.              FailurePoint11:
  489.                 goto FailurePoint10;
  490.             }
  491.         StringTemp = LongDoubleToString(TrackObjectGetReleasePoint1(TheTrackThing),
  492.             7,1e-4,1e6);
  493.         if (StringTemp == NIL)
  494.             {
  495.              FailurePoint12:
  496.                 DisposeTextEdit(Window->ReleasePoint1Edit);
  497.                 goto FailurePoint11;
  498.             }
  499.         TextEditNewRawData(Window->ReleasePoint1Edit,StringTemp,SYSTEMLINEFEED);
  500.         ReleasePtr(StringTemp);
  501.         TextEditHasBeenSaved(Window->ReleasePoint1Edit);
  502.  
  503.         Window->ReleasePoint1StartButton = NewRadioButton(Window->ScreenID,"Start",
  504.             RELEASEPOINT1STARTBUTTONX,RELEASEPOINT1STARTBUTTONY,RELEASEPOINT1STARTBUTTONWIDTH,
  505.             RELEASEPOINT1STARTBUTTONHEIGHT);
  506.         if (Window->ReleasePoint1StartButton == NIL)
  507.             {
  508.              FailurePoint13:
  509.                 goto FailurePoint12;
  510.             }
  511.  
  512.         Window->ReleasePoint1EndButton = NewRadioButton(Window->ScreenID,"End",
  513.             RELEASEPOINT1ENDBUTTONX,RELEASEPOINT1ENDBUTTONY,RELEASEPOINT1ENDBUTTONWIDTH,
  514.             RELEASEPOINT1ENDBUTTONHEIGHT);
  515.         if (Window->ReleasePoint1EndButton == NIL)
  516.             {
  517.              FailurePoint14:
  518.                 DisposeRadioButton(Window->ReleasePoint1StartButton);
  519.                 goto FailurePoint13;
  520.             }
  521.  
  522.         switch (TrackObjectGetReleasePoint1StartEndFlag(TheTrackThing))
  523.             {
  524.                 default:
  525.                     EXECUTE(PRERR(AllowResume,
  526.                         "TrackAttributeDialog:  bad release point 1 start/end flag"));
  527.                     break;
  528.                 case eRelease1FromStart:
  529.                     SetRadioButtonState(Window->ReleasePoint1StartButton,True);
  530.                     break;
  531.                 case eRelease1FromEnd:
  532.                     SetRadioButtonState(Window->ReleasePoint1EndButton,True);
  533.                     break;
  534.             }
  535.  
  536.         Window->LoudnessEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,GetScreenFont(),
  537.             9,LOUDNESSEDITX,LOUDNESSEDITY,LOUDNESSEDITWIDTH,LOUDNESSEDITHEIGHT);
  538.         if (Window->LoudnessEdit == NIL)
  539.             {
  540.              FailurePoint15:
  541.                 DisposeRadioButton(Window->ReleasePoint1EndButton);
  542.                 goto FailurePoint14;
  543.             }
  544.         StringTemp = LongDoubleToString(TrackObjectGetOverallLoudness(TheTrackThing),
  545.             7,1e-4,1e6);
  546.         if (StringTemp == NIL)
  547.             {
  548.              FailurePoint16:
  549.                 DisposeTextEdit(Window->LoudnessEdit);
  550.                 goto FailurePoint15;
  551.             }
  552.         TextEditNewRawData(Window->LoudnessEdit,StringTemp,SYSTEMLINEFEED);
  553.         ReleasePtr(StringTemp);
  554.         TextEditHasBeenSaved(Window->LoudnessEdit);
  555.  
  556.         Window->ReleasePoint2Edit = NewTextEdit(Window->ScreenID,eTENoScrollBars,
  557.             GetScreenFont(),9,RELEASEPOINT2EDITX,RELEASEPOINT2EDITY,RELEASEPOINT2EDITWIDTH,
  558.             RELEASEPOINT2EDITHEIGHT);
  559.         if (Window->ReleasePoint2Edit == NIL)
  560.             {
  561.              FailurePoint17:
  562.                 goto FailurePoint16;
  563.             }
  564.         StringTemp = LongDoubleToString(TrackObjectGetReleasePoint2(TheTrackThing),
  565.             7,1e-4,1e6);
  566.         if (StringTemp == NIL)
  567.             {
  568.              FailurePoint18:
  569.                 DisposeTextEdit(Window->ReleasePoint2Edit);
  570.                 goto FailurePoint17;
  571.             }
  572.         TextEditNewRawData(Window->ReleasePoint2Edit,StringTemp,SYSTEMLINEFEED);
  573.         ReleasePtr(StringTemp);
  574.         TextEditHasBeenSaved(Window->ReleasePoint2Edit);
  575.  
  576.         Window->ReleasePoint2StartButton = NewRadioButton(Window->ScreenID,"Start",
  577.             RELEASEPOINT2STARTBUTTONX,RELEASEPOINT2STARTBUTTONY,RELEASEPOINT2STARTBUTTONWIDTH,
  578.             RELEASEPOINT2STARTBUTTONHEIGHT);
  579.         if (Window->ReleasePoint2StartButton == NIL)
  580.             {
  581.              FailurePoint19:
  582.                 goto FailurePoint18;
  583.             }
  584.  
  585.         Window->ReleasePoint2EndButton = NewRadioButton(Window->ScreenID,"End",
  586.             RELEASEPOINT2ENDBUTTONX,RELEASEPOINT2ENDBUTTONY,RELEASEPOINT2ENDBUTTONWIDTH,
  587.             RELEASEPOINT2ENDBUTTONHEIGHT);
  588.         if (Window->ReleasePoint2EndButton == NIL)
  589.             {
  590.              FailurePoint20:
  591.                 DisposeRadioButton(Window->ReleasePoint2StartButton);
  592.                 goto FailurePoint19;
  593.             }
  594.  
  595.         switch (TrackObjectGetReleasePoint2StartEndFlag(TheTrackThing))
  596.             {
  597.                 default:
  598.                     EXECUTE(PRERR(AllowResume,
  599.                         "TrackAttributeDialog:  bad release point 2 start/end flag"));
  600.                     break;
  601.                 case eRelease2FromStart:
  602.                     SetRadioButtonState(Window->ReleasePoint2StartButton,True);
  603.                     break;
  604.                 case eRelease2FromEnd:
  605.                     SetRadioButtonState(Window->ReleasePoint2EndButton,True);
  606.                     break;
  607.             }
  608.  
  609.         Window->Accent1Edit = NewTextEdit(Window->ScreenID,eTENoScrollBars,GetScreenFont(),
  610.             9,ACCENT1EDITX,ACCENT1EDITY,ACCENT1EDITWIDTH,ACCENT1EDITHEIGHT);
  611.         if (Window->Accent1Edit == NIL)
  612.             {
  613.              FailurePoint21:
  614.                 DisposeRadioButton(Window->ReleasePoint2EndButton);
  615.                 goto FailurePoint20;
  616.             }
  617.         StringTemp = LongDoubleToString(TrackObjectGetAccent1(TheTrackThing),7,1e-4,1e6);
  618.         if (StringTemp == NIL)
  619.             {
  620.              FailurePoint22:
  621.                 DisposeTextEdit(Window->Accent1Edit);
  622.                 goto FailurePoint21;
  623.             }
  624.         TextEditNewRawData(Window->Accent1Edit,StringTemp,SYSTEMLINEFEED);
  625.         ReleasePtr(StringTemp);
  626.         TextEditHasBeenSaved(Window->Accent1Edit);
  627.  
  628.         Window->Accent2Edit = NewTextEdit(Window->ScreenID,eTENoScrollBars,GetScreenFont(),
  629.             9,ACCENT2EDITX,ACCENT2EDITY,ACCENT2EDITWIDTH,ACCENT2EDITHEIGHT);
  630.         if (Window->Accent2Edit == NIL)
  631.             {
  632.              FailurePoint23:
  633.                 goto FailurePoint22;
  634.             }
  635.         StringTemp = LongDoubleToString(TrackObjectGetAccent2(TheTrackThing),7,1e-4,1e6);
  636.         if (StringTemp == NIL)
  637.             {
  638.              FailurePoint24:
  639.                 DisposeTextEdit(Window->Accent2Edit);
  640.                 goto FailurePoint23;
  641.             }
  642.         TextEditNewRawData(Window->Accent2Edit,StringTemp,SYSTEMLINEFEED);
  643.         ReleasePtr(StringTemp);
  644.         TextEditHasBeenSaved(Window->Accent2Edit);
  645.  
  646.         Window->Accent3Edit = NewTextEdit(Window->ScreenID,eTENoScrollBars,GetScreenFont(),
  647.             9,ACCENT3EDITX,ACCENT3EDITY,ACCENT3EDITWIDTH,ACCENT3EDITHEIGHT);
  648.         if (Window->Accent3Edit == NIL)
  649.             {
  650.              FailurePoint25:
  651.                 goto FailurePoint24;
  652.             }
  653.         StringTemp = LongDoubleToString(TrackObjectGetAccent3(TheTrackThing),7,1e-4,1e6);
  654.         if (StringTemp == NIL)
  655.             {
  656.              FailurePoint26:
  657.                 DisposeTextEdit(Window->Accent3Edit);
  658.                 goto FailurePoint25;
  659.             }
  660.         TextEditNewRawData(Window->Accent3Edit,StringTemp,SYSTEMLINEFEED);
  661.         ReleasePtr(StringTemp);
  662.         TextEditHasBeenSaved(Window->Accent3Edit);
  663.  
  664.         Window->Accent4Edit = NewTextEdit(Window->ScreenID,eTENoScrollBars,GetScreenFont(),
  665.             9,ACCENT4EDITX,ACCENT4EDITY,ACCENT4EDITWIDTH,ACCENT4EDITHEIGHT);
  666.         if (Window->Accent4Edit == NIL)
  667.             {
  668.              FailurePoint27:
  669.                 goto FailurePoint26;
  670.             }
  671.         StringTemp = LongDoubleToString(TrackObjectGetAccent4(TheTrackThing),7,1e-4,1e6);
  672.         if (StringTemp == NIL)
  673.             {
  674.              FailurePoint28:
  675.                 DisposeTextEdit(Window->Accent4Edit);
  676.                 goto FailurePoint27;
  677.             }
  678.         TextEditNewRawData(Window->Accent4Edit,StringTemp,SYSTEMLINEFEED);
  679.         ReleasePtr(StringTemp);
  680.         TextEditHasBeenSaved(Window->Accent4Edit);
  681.  
  682.         Window->PitchDispRateEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,
  683.             GetScreenFont(),9,PITCHDISPRATEEDITX,PITCHDISPRATEEDITY,PITCHDISPRATEEDITWIDTH,
  684.             PITCHDISPRATEEDITHEIGHT);
  685.         if (Window->PitchDispRateEdit == NIL)
  686.             {
  687.              FailurePoint29:
  688.                 goto FailurePoint28;
  689.             }
  690.         StringTemp = LongDoubleToString(TrackObjectGetPitchDisplacementRateAdjust(
  691.             TheTrackThing),7,1e-4,1e6);
  692.         if (StringTemp == NIL)
  693.             {
  694.              FailurePoint30:
  695.                 DisposeTextEdit(Window->PitchDispRateEdit);
  696.                 goto FailurePoint29;
  697.             }
  698.         TextEditNewRawData(Window->PitchDispRateEdit,StringTemp,SYSTEMLINEFEED);
  699.         ReleasePtr(StringTemp);
  700.         TextEditHasBeenSaved(Window->PitchDispRateEdit);
  701.  
  702.         Window->PitchDispDepthEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,
  703.             GetScreenFont(),9,PITCHDISPDEPTHEDITX,PITCHDISPDEPTHEDITY,PITCHDISPDEPTHEDITWIDTH,
  704.             PITCHDISPDEPTHEDITHEIGHT);
  705.         if (Window->PitchDispDepthEdit == NIL)
  706.             {
  707.              FailurePoint31:
  708.                 goto FailurePoint30;
  709.             }
  710.         StringTemp = LongDoubleToString(TrackObjectGetPitchDisplacementDepthAdjust(
  711.             TheTrackThing),7,1e-4,1e6);
  712.         if (StringTemp == NIL)
  713.             {
  714.              FailurePoint32:
  715.                 DisposeTextEdit(Window->PitchDispDepthEdit);
  716.                 goto FailurePoint31;
  717.             }
  718.         TextEditNewRawData(Window->PitchDispDepthEdit,StringTemp,SYSTEMLINEFEED);
  719.         ReleasePtr(StringTemp);
  720.         TextEditHasBeenSaved(Window->PitchDispDepthEdit);
  721.  
  722.         Window->HurryUpEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,GetScreenFont(),
  723.             9,HURRYUPEDITX,HURRYUPEDITY,HURRYUPEDITWIDTH,HURRYUPEDITHEIGHT);
  724.         if (Window->HurryUpEdit == NIL)
  725.             {
  726.              FailurePoint35:
  727.                 goto FailurePoint32;
  728.             }
  729.         StringTemp = LongDoubleToString(TrackObjectGetHurryUp(TheTrackThing),7,1e-4,1e6);
  730.         if (StringTemp == NIL)
  731.             {
  732.              FailurePoint36:
  733.                 DisposeTextEdit(Window->HurryUpEdit);
  734.                 goto FailurePoint35;
  735.             }
  736.         TextEditNewRawData(Window->HurryUpEdit,StringTemp,SYSTEMLINEFEED);
  737.         ReleasePtr(StringTemp);
  738.         TextEditHasBeenSaved(Window->HurryUpEdit);
  739.  
  740.         Window->PitchDispStartEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,
  741.             GetScreenFont(),9,PITCHDISPSTARTEDITX,PITCHDISPSTARTEDITY,PITCHDISPSTARTEDITWIDTH,
  742.             PITCHDISPSTARTEDITHEIGHT);
  743.         if (Window->PitchDispStartEdit == NIL)
  744.             {
  745.              FailurePoint37:
  746.                 goto FailurePoint36;
  747.             }
  748.         StringTemp = LongDoubleToString(TrackObjectGetPitchDisplacementStartPoint(
  749.             TheTrackThing),7,1e-4,1e6);
  750.         if (StringTemp == NIL)
  751.             {
  752.              FailurePoint38:
  753.                 DisposeTextEdit(Window->PitchDispStartEdit);
  754.                 goto FailurePoint37;
  755.             }
  756.         TextEditNewRawData(Window->PitchDispStartEdit,StringTemp,SYSTEMLINEFEED);
  757.         ReleasePtr(StringTemp);
  758.         TextEditHasBeenSaved(Window->PitchDispStartEdit);
  759.  
  760.         Window->PitchDispStartStartButton = NewRadioButton(Window->ScreenID,"Start",
  761.             PITCHDISPSTARTSTARTBUTTONX,PITCHDISPSTARTSTARTBUTTONY,
  762.             PITCHDISPSTARTSTARTBUTTONWIDTH,PITCHDISPSTARTSTARTBUTTONHEIGHT);
  763.         if (Window->PitchDispStartStartButton == NIL)
  764.             {
  765.              FailurePoint39:
  766.                 goto FailurePoint38;
  767.             }
  768.  
  769.         Window->PitchDispStartEndButton = NewRadioButton(Window->ScreenID,"End",
  770.             PITCHDISPSTARTENDBUTTONX,PITCHDISPSTARTENDBUTTONY,PITCHDISPSTARTENDBUTTONWIDTH,
  771.             PITCHDISPSTARTENDBUTTONHEIGHT);
  772.         if (Window->PitchDispStartEndButton == NIL)
  773.             {
  774.              FailurePoint40:
  775.                 DisposeRadioButton(Window->PitchDispStartStartButton);
  776.                 goto FailurePoint39;
  777.             }
  778.  
  779.         switch (TrackObjectGetPitchDisplacementFromStartOrEnd(TheTrackThing))
  780.             {
  781.                 default:
  782.                     EXECUTE(PRERR(AllowResume,
  783.                         "TrackAttributeDialog:  bad pitch displacement start/end flag"));
  784.                     break;
  785.                 case ePitchDisplacementStartFromStart:
  786.                     SetRadioButtonState(Window->PitchDispStartStartButton,True);
  787.                     break;
  788.                 case ePitchDisplacementStartFromEnd:
  789.                     SetRadioButtonState(Window->PitchDispStartEndButton,True);
  790.                     break;
  791.             }
  792.  
  793.         Window->DetuneEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,GetScreenFont(),
  794.             9,DETUNEEDITX,DETUNEEDITY,DETUNEEDITWIDTH,DETUNEEDITHEIGHT);
  795.         if (Window->DetuneEdit == NIL)
  796.             {
  797.              FailurePoint41:
  798.                 DisposeRadioButton(Window->PitchDispStartEndButton);
  799.                 goto FailurePoint40;
  800.             }
  801.         StringTemp = LongDoubleToString(TrackObjectGetDetune(TheTrackThing),7,1e-4,1e6);
  802.         if (StringTemp == NIL)
  803.             {
  804.              FailurePoint42:
  805.                 DisposeTextEdit(Window->DetuneEdit);
  806.                 goto FailurePoint41;
  807.             }
  808.         TextEditNewRawData(Window->DetuneEdit,StringTemp,SYSTEMLINEFEED);
  809.         ReleasePtr(StringTemp);
  810.         TextEditHasBeenSaved(Window->DetuneEdit);
  811.  
  812.         Window->DetuneHertzButton = NewRadioButton(Window->ScreenID,"Hertz",
  813.             DETUNEHERTZBUTTONX,DETUNEHERTZBUTTONY,DETUNEHERTZBUTTONWIDTH,
  814.             DETUNEHERTZBUTTONHEIGHT);
  815.         if (Window->DetuneHertzButton == NIL)
  816.             {
  817.              FailurePoint43:
  818.                 goto FailurePoint42;
  819.             }
  820.  
  821.         Window->DetuneHalfStepButton = NewRadioButton(Window->ScreenID,"Halfsteps",
  822.             DETUNEHALFSTEPBUTTONX,DETUNEHALFSTEPBUTTONY,DETUNEHALFSTEPBUTTONWIDTH,
  823.             DETUNEHALFSTEPBUTTONHEIGHT);
  824.         if (Window->DetuneHalfStepButton == NIL)
  825.             {
  826.              FailurePoint44:
  827.                 DisposeRadioButton(Window->DetuneHertzButton);
  828.                 goto FailurePoint43;
  829.             }
  830.  
  831.         switch (TrackObjectGetDetuneControlFlag(TheTrackThing))
  832.             {
  833.                 default:
  834.                     EXECUTE(PRERR(AllowResume,
  835.                         "TrackAttributeDialog:  bad detune pitch conversion flag"));
  836.                     break;
  837.                 case eDetuningModeHertz:
  838.                     SetRadioButtonState(Window->DetuneHertzButton,True);
  839.                     break;
  840.                 case eDetuningModeHalfSteps:
  841.                     SetRadioButtonState(Window->DetuneHalfStepButton,True);
  842.                     break;
  843.             }
  844.  
  845.         Window->StereoPositionEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,
  846.             GetScreenFont(),9,STEREOPOSITIONEDITX,STEREOPOSITIONEDITY,STEREOPOSITIONEDITWIDTH,
  847.             STEREOPOSITIONEDITHEIGHT);
  848.         if (Window->StereoPositionEdit == NIL)
  849.             {
  850.              FailurePoint45:
  851.                 DisposeRadioButton(Window->DetuneHalfStepButton);
  852.                 goto FailurePoint44;
  853.             }
  854.         StringTemp = LongDoubleToString(TrackObjectGetStereoPositioning(TheTrackThing),
  855.             7,1e-4,1e6);
  856.         if (StringTemp == NIL)
  857.             {
  858.              FailurePoint46:
  859.                 DisposeTextEdit(Window->StereoPositionEdit);
  860.                 goto FailurePoint45;
  861.             }
  862.         TextEditNewRawData(Window->StereoPositionEdit,StringTemp,SYSTEMLINEFEED);
  863.         ReleasePtr(StringTemp);
  864.         TextEditHasBeenSaved(Window->StereoPositionEdit);
  865.  
  866.         Window->DurationEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,GetScreenFont(),
  867.             9,DURATIONEDITX,DURATIONEDITY,DURATIONEDITWIDTH,DURATIONEDITHEIGHT);
  868.         if (Window->DurationEdit == NIL)
  869.             {
  870.              FailurePoint47:
  871.                 goto FailurePoint46;
  872.             }
  873.         StringTemp = LongDoubleToString(TrackObjectGetDurationAdjust(TheTrackThing),
  874.             7,1e-4,1e6);
  875.         if (StringTemp == NIL)
  876.             {
  877.              FailurePoint48:
  878.                 DisposeTextEdit(Window->DurationEdit);
  879.                 goto FailurePoint47;
  880.             }
  881.         TextEditNewRawData(Window->DurationEdit,StringTemp,SYSTEMLINEFEED);
  882.         ReleasePtr(StringTemp);
  883.         TextEditHasBeenSaved(Window->DurationEdit);
  884.  
  885.         Window->DurationAddButton = NewRadioButton(Window->ScreenID,"Add",
  886.             DURATIONADDBUTTONX,DURATIONADDBUTTONY,DURATIONADDBUTTONWIDTH,
  887.             DURATIONADDBUTTONHEIGHT);
  888.         if (Window->DurationAddButton == NIL)
  889.             {
  890.              FailurePoint49:
  891.                 goto FailurePoint48;
  892.             }
  893.  
  894.         Window->DurationMultButton = NewRadioButton(Window->ScreenID,"Mult",
  895.             DURATIONMULTBUTTONX,DURATIONMULTBUTTONY,DURATIONMULTBUTTONWIDTH,
  896.             DURATIONMULTBUTTONHEIGHT);
  897.         if (Window->DurationMultButton == NIL)
  898.             {
  899.              FailurePoint50:
  900.                 DisposeRadioButton(Window->DurationAddButton);
  901.                 goto FailurePoint49;
  902.             }
  903.  
  904.         switch (TrackObjectGetDurationModeFlag(TheTrackThing))
  905.             {
  906.                 default:
  907.                     EXECUTE(PRERR(AllowResume,
  908.                         "TrackAttributeDialog:  bad duration mode flag"));
  909.                     break;
  910.                 case eDurationAdjustAdditive:
  911.                     SetRadioButtonState(Window->DurationAddButton,True);
  912.                     break;
  913.                 case eDurationAdjustMultiplicative:
  914.                     SetRadioButtonState(Window->DurationMultButton,True);
  915.                     break;
  916.             }
  917.  
  918.  
  919.         Window->SurroundEdit = NewTextEdit(Window->ScreenID,eTENoScrollBars,
  920.             GetScreenFont(),9,SURROUNDPOSITIONEDITX,SURROUNDPOSITIONEDITY,
  921.             SURROUNDPOSITIONEDITWIDTH,SURROUNDPOSITIONEDITHEIGHT);
  922.         if (Window->SurroundEdit == NIL)
  923.             {
  924.              FailurePoint51:
  925.                 DisposeRadioButton(Window->DurationMultButton);
  926.                 goto FailurePoint50;
  927.             }
  928.         StringTemp = LongDoubleToString(TrackObjectGetSurroundPositioning(TheTrackThing),
  929.             7,1e-4,1e6);
  930.         if (StringTemp == NIL)
  931.             {
  932.              FailurePoint52:
  933.                 DisposeTextEdit(Window->SurroundEdit);
  934.                 goto FailurePoint51;
  935.             }
  936.         TextEditNewRawData(Window->SurroundEdit,StringTemp,SYSTEMLINEFEED);
  937.         ReleasePtr(StringTemp);
  938.         TextEditHasBeenSaved(Window->SurroundEdit);
  939.  
  940.  
  941.         ActiveTextEdit = Window->NameEdit;
  942.         EnableTextEditSelection(ActiveTextEdit);
  943.         TextEditDoMenuSelectAll(ActiveTextEdit);
  944.         LoopFlag = True;
  945.         while (LoopFlag)
  946.             {
  947.                 OrdType                            X;
  948.                 OrdType                            Y;
  949.                 ModifierFlags                Modifiers;
  950.                 MenuItemType*                MenuItem;
  951.                 char                                KeyPress;
  952.  
  953.                 switch (GetAnEvent(&X,&Y,&Modifiers,NIL,&MenuItem,&KeyPress))
  954.                     {
  955.                         default:
  956.                             break;
  957.                         case eCheckCursor:
  958.                             if (TextEditIBeamTest(Window->NameEdit,X,Y)
  959.                                 || TextEditIBeamTest(Window->InstrumentEdit,X,Y)
  960.                                 || TextEditIBeamTest(Window->EarlyLateAdjustEdit,X,Y)
  961.                                 || TextEditIBeamTest(Window->ReleasePoint1Edit,X,Y)
  962.                                 || TextEditIBeamTest(Window->LoudnessEdit,X,Y)
  963.                                 || TextEditIBeamTest(Window->ReleasePoint2Edit,X,Y)
  964.                                 || TextEditIBeamTest(Window->Accent1Edit,X,Y)
  965.                                 || TextEditIBeamTest(Window->Accent2Edit,X,Y)
  966.                                 || TextEditIBeamTest(Window->Accent3Edit,X,Y)
  967.                                 || TextEditIBeamTest(Window->Accent4Edit,X,Y)
  968.                                 || TextEditIBeamTest(Window->PitchDispRateEdit,X,Y)
  969.                                 || TextEditIBeamTest(Window->PitchDispDepthEdit,X,Y)
  970.                                 || TextEditIBeamTest(Window->HurryUpEdit,X,Y)
  971.                                 || TextEditIBeamTest(Window->PitchDispStartEdit,X,Y)
  972.                                 || TextEditIBeamTest(Window->DetuneEdit,X,Y)
  973.                                 || TextEditIBeamTest(Window->StereoPositionEdit,X,Y)
  974.                                 || TextEditIBeamTest(Window->SurroundEdit,X,Y)
  975.                                 || TextEditIBeamTest(Window->DurationEdit,X,Y))
  976.                                 {
  977.                                     SetIBeamCursor();
  978.                                 }
  979.                              else
  980.                                 {
  981.                                     SetArrowCursor();
  982.                                 }
  983.                             goto UpdateCursorPoint;
  984.                             break;
  985.                         case eNoEvent:
  986.                          UpdateCursorPoint:
  987.                             TextEditUpdateCursor(ActiveTextEdit);
  988.                             break;
  989.                         case eMenuStarting:
  990.                             EnableMenuItem(mPaste);
  991.                             if (TextEditIsThereValidSelection(ActiveTextEdit))
  992.                                 {
  993.                                     EnableMenuItem(mCut);
  994.                                     EnableMenuItem(mCopy);
  995.                                     EnableMenuItem(mClear);
  996.                                 }
  997.                             EnableMenuItem(mSelectAll);
  998.                             if (TextEditCanWeUndo(ActiveTextEdit))
  999.                                 {
  1000.                                     EnableMenuItem(mUndo);
  1001.                                 }
  1002.                             break;
  1003.                         case eMenuCommand:
  1004.                             if (MenuItem == mPaste)
  1005.                                 {
  1006.                                     TextEditDoMenuPaste(ActiveTextEdit);
  1007.                                 }
  1008.                             else if (MenuItem == mCut)
  1009.                                 {
  1010.                                     TextEditDoMenuCut(ActiveTextEdit);
  1011.                                 }
  1012.                             else if (MenuItem == mCopy)
  1013.                                 {
  1014.                                     TextEditDoMenuCopy(ActiveTextEdit);
  1015.                                 }
  1016.                             else if (MenuItem == mClear)
  1017.                                 {
  1018.                                     TextEditDoMenuClear(ActiveTextEdit);
  1019.                                 }
  1020.                             else if (MenuItem == mUndo)
  1021.                                 {
  1022.                                     TextEditDoMenuUndo(ActiveTextEdit);
  1023.                                     TextEditShowSelection(ActiveTextEdit);
  1024.                                 }
  1025.                             else if (MenuItem == mSelectAll)
  1026.                                 {
  1027.                                     TextEditDoMenuSelectAll(ActiveTextEdit);
  1028.                                 }
  1029.                             else
  1030.                                 {
  1031.                                     EXECUTE(PRERR(AllowResume,
  1032.                                         "TrackAttributeDialog: Undefined menu option chosen"));
  1033.                                 }
  1034.                             break;
  1035.                         case eKeyPressed:
  1036.                             if (KeyPress == 13)
  1037.                                 {
  1038.                                     FlashButton(Window->OKButton);
  1039.                                     DoItFlag = True;
  1040.                                     LoopFlag = False;
  1041.                                 }
  1042.                             else if (KeyPress == 9)
  1043.                                 {
  1044.                                     DisableTextEditSelection(ActiveTextEdit);
  1045.                                     if ((eShiftKey & Modifiers) == 0)
  1046.                                         {
  1047.                                             /* tab forwards */
  1048.                                             if (ActiveTextEdit == Window->NameEdit)
  1049.                                                 {
  1050.                                                     ActiveTextEdit = Window->InstrumentEdit;
  1051.                                                 }
  1052.                                             else if (ActiveTextEdit == Window->InstrumentEdit)
  1053.                                                 {
  1054.                                                     ActiveTextEdit = Window->EarlyLateAdjustEdit;
  1055.                                                 }
  1056.                                             else if (ActiveTextEdit == Window->EarlyLateAdjustEdit)
  1057.                                                 {
  1058.                                                     ActiveTextEdit = Window->ReleasePoint1Edit;
  1059.                                                 }
  1060.                                             else if (ActiveTextEdit == Window->ReleasePoint1Edit)
  1061.                                                 {
  1062.                                                     ActiveTextEdit = Window->LoudnessEdit;
  1063.                                                 }
  1064.                                             else if (ActiveTextEdit == Window->LoudnessEdit)
  1065.                                                 {
  1066.                                                     ActiveTextEdit = Window->ReleasePoint2Edit;
  1067.                                                 }
  1068.                                             else if (ActiveTextEdit == Window->ReleasePoint2Edit)
  1069.                                                 {
  1070.                                                     ActiveTextEdit = Window->Accent1Edit;
  1071.                                                 }
  1072.                                             else if (ActiveTextEdit == Window->Accent1Edit)
  1073.                                                 {
  1074.                                                     ActiveTextEdit = Window->Accent2Edit;
  1075.                                                 }
  1076.                                             else if (ActiveTextEdit == Window->Accent2Edit)
  1077.                                                 {
  1078.                                                     ActiveTextEdit = Window->Accent3Edit;
  1079.                                                 }
  1080.                                             else if (ActiveTextEdit == Window->Accent3Edit)
  1081.                                                 {
  1082.                                                     ActiveTextEdit = Window->Accent4Edit;
  1083.                                                 }
  1084.                                             else if (ActiveTextEdit == Window->Accent4Edit)
  1085.                                                 {
  1086.                                                     ActiveTextEdit = Window->PitchDispRateEdit;
  1087.                                                 }
  1088.                                             else if (ActiveTextEdit == Window->PitchDispRateEdit)
  1089.                                                 {
  1090.                                                     ActiveTextEdit = Window->PitchDispDepthEdit;
  1091.                                                 }
  1092.                                             else if (ActiveTextEdit == Window->PitchDispDepthEdit)
  1093.                                                 {
  1094.                                                     ActiveTextEdit = Window->HurryUpEdit;
  1095.                                                 }
  1096.                                             else if (ActiveTextEdit == Window->HurryUpEdit)
  1097.                                                 {
  1098.                                                     ActiveTextEdit = Window->PitchDispStartEdit;
  1099.                                                 }
  1100.                                             else if (ActiveTextEdit == Window->PitchDispStartEdit)
  1101.                                                 {
  1102.                                                     ActiveTextEdit = Window->StereoPositionEdit;
  1103.                                                 }
  1104.                                             else if (ActiveTextEdit == Window->StereoPositionEdit)
  1105.                                                 {
  1106.                                                     ActiveTextEdit = Window->DetuneEdit;
  1107.                                                 }
  1108.                                             else if (ActiveTextEdit == Window->DetuneEdit)
  1109.                                                 {
  1110.                                                     ActiveTextEdit = Window->SurroundEdit;
  1111.                                                 }
  1112.                                             else if (ActiveTextEdit == Window->SurroundEdit)
  1113.                                                 {
  1114.                                                     ActiveTextEdit = Window->DurationEdit;
  1115.                                                 }
  1116.                                             else
  1117.                                                 {
  1118.                                                     ActiveTextEdit = Window->NameEdit;
  1119.                                                 }
  1120.                                         }
  1121.                                      else
  1122.                                         {
  1123.                                             /* tab backwards */
  1124.                                             if (ActiveTextEdit == Window->DurationEdit)
  1125.                                                 {
  1126.                                                     ActiveTextEdit = Window->SurroundEdit;
  1127.                                                 }
  1128.                                             else if (ActiveTextEdit == Window->SurroundEdit)
  1129.                                                 {
  1130.                                                     ActiveTextEdit = Window->DetuneEdit;
  1131.                                                 }
  1132.                                             else if (ActiveTextEdit == Window->DetuneEdit)
  1133.                                                 {
  1134.                                                     ActiveTextEdit = Window->StereoPositionEdit;
  1135.                                                 }
  1136.                                             else if (ActiveTextEdit == Window->StereoPositionEdit)
  1137.                                                 {
  1138.                                                     ActiveTextEdit = Window->PitchDispStartEdit;
  1139.                                                 }
  1140.                                             else if (ActiveTextEdit == Window->PitchDispStartEdit)
  1141.                                                 {
  1142.                                                     ActiveTextEdit = Window->HurryUpEdit;
  1143.                                                 }
  1144.                                             else if (ActiveTextEdit == Window->HurryUpEdit)
  1145.                                                 {
  1146.                                                     ActiveTextEdit = Window->PitchDispDepthEdit;
  1147.                                                 }
  1148.                                             else if (ActiveTextEdit == Window->PitchDispDepthEdit)
  1149.                                                 {
  1150.                                                     ActiveTextEdit = Window->PitchDispRateEdit;
  1151.                                                 }
  1152.                                             else if (ActiveTextEdit == Window->PitchDispRateEdit)
  1153.                                                 {
  1154.                                                     ActiveTextEdit = Window->Accent4Edit;
  1155.                                                 }
  1156.                                             else if (ActiveTextEdit == Window->Accent4Edit)
  1157.                                                 {
  1158.                                                     ActiveTextEdit = Window->Accent3Edit;
  1159.                                                 }
  1160.                                             else if (ActiveTextEdit == Window->Accent3Edit)
  1161.                                                 {
  1162.                                                     ActiveTextEdit = Window->Accent2Edit;
  1163.                                                 }
  1164.                                             else if (ActiveTextEdit == Window->Accent2Edit)
  1165.                                                 {
  1166.                                                     ActiveTextEdit = Window->Accent1Edit;
  1167.                                                 }
  1168.                                             else if (ActiveTextEdit == Window->Accent1Edit)
  1169.                                                 {
  1170.                                                     ActiveTextEdit = Window->ReleasePoint2Edit;
  1171.                                                 }
  1172.                                             else if (ActiveTextEdit == Window->ReleasePoint2Edit)
  1173.                                                 {
  1174.                                                     ActiveTextEdit = Window->LoudnessEdit;
  1175.                                                 }
  1176.                                             else if (ActiveTextEdit == Window->LoudnessEdit)
  1177.                                                 {
  1178.                                                     ActiveTextEdit = Window->ReleasePoint1Edit;
  1179.                                                 }
  1180.                                             else if (ActiveTextEdit == Window->ReleasePoint1Edit)
  1181.                                                 {
  1182.                                                     ActiveTextEdit = Window->EarlyLateAdjustEdit;
  1183.                                                 }
  1184.                                             else if (ActiveTextEdit == Window->EarlyLateAdjustEdit)
  1185.                                                 {
  1186.                                                     ActiveTextEdit = Window->InstrumentEdit;
  1187.                                                 }
  1188.                                             else if (ActiveTextEdit == Window->InstrumentEdit)
  1189.                                                 {
  1190.                                                     ActiveTextEdit = Window->NameEdit;
  1191.                                                 }
  1192.                                             else
  1193.                                                 {
  1194.                                                     ActiveTextEdit = Window->DurationEdit;
  1195.                                                 }
  1196.                                         }
  1197.                                     TextEditDoMenuSelectAll(ActiveTextEdit);
  1198.                                     EnableTextEditSelection(ActiveTextEdit);
  1199.                                 }
  1200.                             else if (KeyPress == eCancelKey)
  1201.                                 {
  1202.                                     FlashButton(Window->CancelButton);
  1203.                                     DoItFlag = False;
  1204.                                     LoopFlag = False;
  1205.                                 }
  1206.                             else
  1207.                                 {
  1208.                                     TextEditDoKeyPressed(ActiveTextEdit,KeyPress,Modifiers);
  1209.                                 }
  1210.                             break;
  1211.                         case eMouseDown:
  1212.                             if (SimpleButtonHitTest(Window->OKButton,X,Y))
  1213.                                 {
  1214.                                     if (SimpleButtonMouseDown(Window->OKButton,X,Y,NIL,NIL))
  1215.                                         {
  1216.                                             DoItFlag = True;
  1217.                                             LoopFlag = False;
  1218.                                         }
  1219.                                 }
  1220.                             else if (SimpleButtonHitTest(Window->CancelButton,X,Y))
  1221.                                 {
  1222.                                     if (SimpleButtonMouseDown(Window->CancelButton,X,Y,NIL,NIL))
  1223.                                         {
  1224.                                             DoItFlag = False;
  1225.                                             LoopFlag = False;
  1226.                                         }
  1227.                                 }
  1228.                             else if (TextEditHitTest(Window->NameEdit,X,Y))
  1229.                                 {
  1230.                                     if (ActiveTextEdit != Window->NameEdit)
  1231.                                         {
  1232.                                             DisableTextEditSelection(ActiveTextEdit);
  1233.                                             ActiveTextEdit = Window->NameEdit;
  1234.                                             EnableTextEditSelection(ActiveTextEdit);
  1235.                                         }
  1236.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1237.                                 }
  1238.                             else if (TextEditHitTest(Window->InstrumentEdit,X,Y))
  1239.                                 {
  1240.                                     if (ActiveTextEdit != Window->InstrumentEdit)
  1241.                                         {
  1242.                                             DisableTextEditSelection(ActiveTextEdit);
  1243.                                             ActiveTextEdit = Window->InstrumentEdit;
  1244.                                             EnableTextEditSelection(ActiveTextEdit);
  1245.                                         }
  1246.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1247.                                 }
  1248.                             else if (TextEditHitTest(Window->EarlyLateAdjustEdit,X,Y))
  1249.                                 {
  1250.                                     if (ActiveTextEdit != Window->EarlyLateAdjustEdit)
  1251.                                         {
  1252.                                             DisableTextEditSelection(ActiveTextEdit);
  1253.                                             ActiveTextEdit = Window->EarlyLateAdjustEdit;
  1254.                                             EnableTextEditSelection(ActiveTextEdit);
  1255.                                         }
  1256.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1257.                                 }
  1258.                             else if (TextEditHitTest(Window->ReleasePoint1Edit,X,Y))
  1259.                                 {
  1260.                                     if (ActiveTextEdit != Window->ReleasePoint1Edit)
  1261.                                         {
  1262.                                             DisableTextEditSelection(ActiveTextEdit);
  1263.                                             ActiveTextEdit = Window->ReleasePoint1Edit;
  1264.                                             EnableTextEditSelection(ActiveTextEdit);
  1265.                                         }
  1266.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1267.                                 }
  1268.                             else if (RadioButtonHitTest(Window->ReleasePoint1StartButton,X,Y))
  1269.                                 {
  1270.                                     if (RadioButtonMouseDown(Window->ReleasePoint1StartButton,X,Y))
  1271.                                         {
  1272.                                             SetRadioButtonState(Window->ReleasePoint1EndButton,False);
  1273.                                         }
  1274.                                 }
  1275.                             else if (RadioButtonHitTest(Window->ReleasePoint1EndButton,X,Y))
  1276.                                 {
  1277.                                     if (RadioButtonMouseDown(Window->ReleasePoint1EndButton,X,Y))
  1278.                                         {
  1279.                                             SetRadioButtonState(Window->ReleasePoint1StartButton,False);
  1280.                                         }
  1281.                                 }
  1282.                             else if (TextEditHitTest(Window->LoudnessEdit,X,Y))
  1283.                                 {
  1284.                                     if (ActiveTextEdit != Window->LoudnessEdit)
  1285.                                         {
  1286.                                             DisableTextEditSelection(ActiveTextEdit);
  1287.                                             ActiveTextEdit = Window->LoudnessEdit;
  1288.                                             EnableTextEditSelection(ActiveTextEdit);
  1289.                                         }
  1290.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1291.                                 }
  1292.                             else if (TextEditHitTest(Window->ReleasePoint2Edit,X,Y))
  1293.                                 {
  1294.                                     if (ActiveTextEdit != Window->ReleasePoint2Edit)
  1295.                                         {
  1296.                                             DisableTextEditSelection(ActiveTextEdit);
  1297.                                             ActiveTextEdit = Window->ReleasePoint2Edit;
  1298.                                             EnableTextEditSelection(ActiveTextEdit);
  1299.                                         }
  1300.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1301.                                 }
  1302.                             else if (RadioButtonHitTest(Window->ReleasePoint2StartButton,X,Y))
  1303.                                 {
  1304.                                     if (RadioButtonMouseDown(Window->ReleasePoint2StartButton,X,Y))
  1305.                                         {
  1306.                                             SetRadioButtonState(Window->ReleasePoint2EndButton,False);
  1307.                                         }
  1308.                                 }
  1309.                             else if (RadioButtonHitTest(Window->ReleasePoint2EndButton,X,Y))
  1310.                                 {
  1311.                                     if (RadioButtonMouseDown(Window->ReleasePoint2EndButton,X,Y))
  1312.                                         {
  1313.                                             SetRadioButtonState(Window->ReleasePoint2StartButton,False);
  1314.                                         }
  1315.                                 }
  1316.                             else if (TextEditHitTest(Window->Accent1Edit,X,Y))
  1317.                                 {
  1318.                                     if (ActiveTextEdit != Window->Accent1Edit)
  1319.                                         {
  1320.                                             DisableTextEditSelection(ActiveTextEdit);
  1321.                                             ActiveTextEdit = Window->Accent1Edit;
  1322.                                             EnableTextEditSelection(ActiveTextEdit);
  1323.                                         }
  1324.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1325.                                 }
  1326.                             else if (TextEditHitTest(Window->Accent2Edit,X,Y))
  1327.                                 {
  1328.                                     if (ActiveTextEdit != Window->Accent2Edit)
  1329.                                         {
  1330.                                             DisableTextEditSelection(ActiveTextEdit);
  1331.                                             ActiveTextEdit = Window->Accent2Edit;
  1332.                                             EnableTextEditSelection(ActiveTextEdit);
  1333.                                         }
  1334.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1335.                                 }
  1336.                             else if (TextEditHitTest(Window->Accent3Edit,X,Y))
  1337.                                 {
  1338.                                     if (ActiveTextEdit != Window->Accent3Edit)
  1339.                                         {
  1340.                                             DisableTextEditSelection(ActiveTextEdit);
  1341.                                             ActiveTextEdit = Window->Accent3Edit;
  1342.                                             EnableTextEditSelection(ActiveTextEdit);
  1343.                                         }
  1344.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1345.                                 }
  1346.                             else if (TextEditHitTest(Window->Accent4Edit,X,Y))
  1347.                                 {
  1348.                                     if (ActiveTextEdit != Window->Accent4Edit)
  1349.                                         {
  1350.                                             DisableTextEditSelection(ActiveTextEdit);
  1351.                                             ActiveTextEdit = Window->Accent4Edit;
  1352.                                             EnableTextEditSelection(ActiveTextEdit);
  1353.                                         }
  1354.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1355.                                 }
  1356.                             else if (TextEditHitTest(Window->PitchDispRateEdit,X,Y))
  1357.                                 {
  1358.                                     if (ActiveTextEdit != Window->PitchDispRateEdit)
  1359.                                         {
  1360.                                             DisableTextEditSelection(ActiveTextEdit);
  1361.                                             ActiveTextEdit = Window->PitchDispRateEdit;
  1362.                                             EnableTextEditSelection(ActiveTextEdit);
  1363.                                         }
  1364.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1365.                                 }
  1366.                             else if (TextEditHitTest(Window->PitchDispDepthEdit,X,Y))
  1367.                                 {
  1368.                                     if (ActiveTextEdit != Window->PitchDispDepthEdit)
  1369.                                         {
  1370.                                             DisableTextEditSelection(ActiveTextEdit);
  1371.                                             ActiveTextEdit = Window->PitchDispDepthEdit;
  1372.                                             EnableTextEditSelection(ActiveTextEdit);
  1373.                                         }
  1374.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1375.                                 }
  1376.                             else if (TextEditHitTest(Window->HurryUpEdit,X,Y))
  1377.                                 {
  1378.                                     if (ActiveTextEdit != Window->HurryUpEdit)
  1379.                                         {
  1380.                                             DisableTextEditSelection(ActiveTextEdit);
  1381.                                             ActiveTextEdit = Window->HurryUpEdit;
  1382.                                             EnableTextEditSelection(ActiveTextEdit);
  1383.                                         }
  1384.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1385.                                 }
  1386.                             else if (TextEditHitTest(Window->PitchDispStartEdit,X,Y))
  1387.                                 {
  1388.                                     if (ActiveTextEdit != Window->PitchDispStartEdit)
  1389.                                         {
  1390.                                             DisableTextEditSelection(ActiveTextEdit);
  1391.                                             ActiveTextEdit = Window->PitchDispStartEdit;
  1392.                                             EnableTextEditSelection(ActiveTextEdit);
  1393.                                         }
  1394.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1395.                                 }
  1396.                             else if (RadioButtonHitTest(Window->PitchDispStartStartButton,X,Y))
  1397.                                 {
  1398.                                     if (RadioButtonMouseDown(Window->PitchDispStartStartButton,X,Y))
  1399.                                         {
  1400.                                             SetRadioButtonState(Window->PitchDispStartEndButton,False);
  1401.                                         }
  1402.                                 }
  1403.                             else if (RadioButtonHitTest(Window->PitchDispStartEndButton,X,Y))
  1404.                                 {
  1405.                                     if (RadioButtonMouseDown(Window->PitchDispStartEndButton,X,Y))
  1406.                                         {
  1407.                                             SetRadioButtonState(Window->PitchDispStartStartButton,False);
  1408.                                         }
  1409.                                 }
  1410.                             else if (TextEditHitTest(Window->DetuneEdit,X,Y))
  1411.                                 {
  1412.                                     if (ActiveTextEdit != Window->DetuneEdit)
  1413.                                         {
  1414.                                             DisableTextEditSelection(ActiveTextEdit);
  1415.                                             ActiveTextEdit = Window->DetuneEdit;
  1416.                                             EnableTextEditSelection(ActiveTextEdit);
  1417.                                         }
  1418.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1419.                                 }
  1420.                             else if (RadioButtonHitTest(Window->DetuneHertzButton,X,Y))
  1421.                                 {
  1422.                                     if (RadioButtonMouseDown(Window->DetuneHertzButton,X,Y))
  1423.                                         {
  1424.                                             SetRadioButtonState(Window->DetuneHalfStepButton,False);
  1425.                                         }
  1426.                                 }
  1427.                             else if (RadioButtonHitTest(Window->DetuneHalfStepButton,X,Y))
  1428.                                 {
  1429.                                     if (RadioButtonMouseDown(Window->DetuneHalfStepButton,X,Y))
  1430.                                         {
  1431.                                             SetRadioButtonState(Window->DetuneHertzButton,False);
  1432.                                         }
  1433.                                 }
  1434.                             else if (TextEditHitTest(Window->StereoPositionEdit,X,Y))
  1435.                                 {
  1436.                                     if (ActiveTextEdit != Window->StereoPositionEdit)
  1437.                                         {
  1438.                                             DisableTextEditSelection(ActiveTextEdit);
  1439.                                             ActiveTextEdit = Window->StereoPositionEdit;
  1440.                                             EnableTextEditSelection(ActiveTextEdit);
  1441.                                         }
  1442.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1443.                                 }
  1444.                             else if (TextEditHitTest(Window->SurroundEdit,X,Y))
  1445.                                 {
  1446.                                     if (ActiveTextEdit != Window->SurroundEdit)
  1447.                                         {
  1448.                                             DisableTextEditSelection(ActiveTextEdit);
  1449.                                             ActiveTextEdit = Window->SurroundEdit;
  1450.                                             EnableTextEditSelection(ActiveTextEdit);
  1451.                                         }
  1452.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1453.                                 }
  1454.                             else if (TextEditHitTest(Window->DurationEdit,X,Y))
  1455.                                 {
  1456.                                     if (ActiveTextEdit != Window->DurationEdit)
  1457.                                         {
  1458.                                             DisableTextEditSelection(ActiveTextEdit);
  1459.                                             ActiveTextEdit = Window->DurationEdit;
  1460.                                             EnableTextEditSelection(ActiveTextEdit);
  1461.                                         }
  1462.                                     TextEditDoMouseDown(ActiveTextEdit,X,Y,Modifiers);
  1463.                                 }
  1464.                             else if (RadioButtonHitTest(Window->DurationAddButton,X,Y))
  1465.                                 {
  1466.                                     if (RadioButtonMouseDown(Window->DurationAddButton,X,Y))
  1467.                                         {
  1468.                                             SetRadioButtonState(Window->DurationMultButton,False);
  1469.                                         }
  1470.                                 }
  1471.                             else if (RadioButtonHitTest(Window->DurationMultButton,X,Y))
  1472.                                 {
  1473.                                     if (RadioButtonMouseDown(Window->DurationMultButton,X,Y))
  1474.                                         {
  1475.                                             SetRadioButtonState(Window->DurationAddButton,False);
  1476.                                         }
  1477.                                 }
  1478.                             break;
  1479.                     }
  1480.             }
  1481.         ERROR((DoItFlag != True) && (DoItFlag != False),PRERR(ForceAbort,
  1482.             "TrackAttributeDialog:  DoItFlag is neither true nor false"));
  1483.  
  1484.         if (DoItFlag)
  1485.             {
  1486.                 MyBoolean                    ErrorNoMemory;
  1487.  
  1488.                 ErrorNoMemory = False;
  1489.  
  1490.                 if (TextEditDoesItNeedToBeSaved(Window->InstrumentEdit))
  1491.                     {
  1492.                         StringTemp = TextEditGetRawData(Window->InstrumentEdit,SYSTEMLINEFEED);
  1493.                         if (StringTemp == NIL)
  1494.                             {
  1495.                                 ErrorNoMemory = True;
  1496.                             }
  1497.                          else
  1498.                             {
  1499.                                 TrackObjectPutNewInstrName(TheTrackThing,StringTemp);
  1500.                             }
  1501.                     }
  1502.  
  1503.                 if (TextEditDoesItNeedToBeSaved(Window->NameEdit))
  1504.                     {
  1505.                         StringTemp = TextEditGetRawData(Window->NameEdit,SYSTEMLINEFEED);
  1506.                         if (StringTemp == NIL)
  1507.                             {
  1508.                                 ErrorNoMemory = True;
  1509.                             }
  1510.                          else
  1511.                             {
  1512.                                 TrackObjectPutName(TheTrackThing,StringTemp);
  1513.                             }
  1514.                     }
  1515.  
  1516.                 if (TextEditDoesItNeedToBeSaved(Window->EarlyLateAdjustEdit))
  1517.                     {
  1518.                         StringTemp = TextEditGetRawData(Window->EarlyLateAdjustEdit,SYSTEMLINEFEED);
  1519.                         if (StringTemp == NIL)
  1520.                             {
  1521.                                 ErrorNoMemory = True;
  1522.                             }
  1523.                          else
  1524.                             {
  1525.                                 PutTrackObjectEarlyLateAdjust(TheTrackThing,
  1526.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1527.                                 ReleasePtr(StringTemp);
  1528.                             }
  1529.                     }
  1530.  
  1531.                 if (TextEditDoesItNeedToBeSaved(Window->ReleasePoint1Edit))
  1532.                     {
  1533.                         StringTemp = TextEditGetRawData(Window->ReleasePoint1Edit,SYSTEMLINEFEED);
  1534.                         if (StringTemp == NIL)
  1535.                             {
  1536.                                 ErrorNoMemory = True;
  1537.                             }
  1538.                          else
  1539.                             {
  1540.                                 PutTrackObjectReleasePoint1(TheTrackThing,
  1541.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1542.                                 ReleasePtr(StringTemp);
  1543.                             }
  1544.                     }
  1545.  
  1546.                 if (GetRadioButtonState(Window->ReleasePoint1StartButton))
  1547.                     {
  1548.                         PutTrackObjectReleasePoint1StartEndFlag(TheTrackThing,eRelease1FromStart);
  1549.                     }
  1550.                 else if (GetRadioButtonState(Window->ReleasePoint1EndButton))
  1551.                     {
  1552.                         PutTrackObjectReleasePoint1StartEndFlag(TheTrackThing,eRelease1FromEnd);
  1553.                     }
  1554.                 else
  1555.                     {
  1556.                         EXECUTE(PRERR(AllowResume,"TrackAttributeDialog:  release point 1 radio "
  1557.                             "buttons are in an inconsistent state"));
  1558.                     }
  1559.  
  1560.                 if (TextEditDoesItNeedToBeSaved(Window->LoudnessEdit))
  1561.                     {
  1562.                         StringTemp = TextEditGetRawData(Window->LoudnessEdit,SYSTEMLINEFEED);
  1563.                         if (StringTemp == NIL)
  1564.                             {
  1565.                                 ErrorNoMemory = True;
  1566.                             }
  1567.                          else
  1568.                             {
  1569.                                 PutTrackObjectOverallLoudness(TheTrackThing,
  1570.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1571.                                 ReleasePtr(StringTemp);
  1572.                             }
  1573.                     }
  1574.  
  1575.                 if (TextEditDoesItNeedToBeSaved(Window->ReleasePoint2Edit))
  1576.                     {
  1577.                         StringTemp = TextEditGetRawData(Window->ReleasePoint2Edit,SYSTEMLINEFEED);
  1578.                         if (StringTemp == NIL)
  1579.                             {
  1580.                                 ErrorNoMemory = True;
  1581.                             }
  1582.                          else
  1583.                             {
  1584.                                 PutTrackObjectReleasePoint2(TheTrackThing,
  1585.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1586.                                 ReleasePtr(StringTemp);
  1587.                             }
  1588.                     }
  1589.  
  1590.                 if (GetRadioButtonState(Window->ReleasePoint2StartButton))
  1591.                     {
  1592.                         PutTrackObjectReleasePoint2StartEndFlag(TheTrackThing,eRelease2FromStart);
  1593.                     }
  1594.                 else if (GetRadioButtonState(Window->ReleasePoint2EndButton))
  1595.                     {
  1596.                         PutTrackObjectReleasePoint2StartEndFlag(TheTrackThing,eRelease2FromEnd);
  1597.                     }
  1598.                 else
  1599.                     {
  1600.                         EXECUTE(PRERR(AllowResume,"TrackAttributeDialog:  release point 2 radio "
  1601.                             "buttons are in an inconsistent state"));
  1602.                     }
  1603.  
  1604.                 if (TextEditDoesItNeedToBeSaved(Window->Accent1Edit))
  1605.                     {
  1606.                         StringTemp = TextEditGetRawData(Window->Accent1Edit,SYSTEMLINEFEED);
  1607.                         if (StringTemp == NIL)
  1608.                             {
  1609.                                 ErrorNoMemory = True;
  1610.                             }
  1611.                          else
  1612.                             {
  1613.                                 PutTrackObjectAccent1(TheTrackThing,
  1614.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1615.                                 ReleasePtr(StringTemp);
  1616.                             }
  1617.                     }
  1618.  
  1619.                 if (TextEditDoesItNeedToBeSaved(Window->Accent2Edit))
  1620.                     {
  1621.                         StringTemp = TextEditGetRawData(Window->Accent2Edit,SYSTEMLINEFEED);
  1622.                         if (StringTemp == NIL)
  1623.                             {
  1624.                                 ErrorNoMemory = True;
  1625.                             }
  1626.                          else
  1627.                             {
  1628.                                 PutTrackObjectAccent2(TheTrackThing,
  1629.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1630.                                 ReleasePtr(StringTemp);
  1631.                             }
  1632.                     }
  1633.  
  1634.                 if (TextEditDoesItNeedToBeSaved(Window->Accent3Edit))
  1635.                     {
  1636.                         StringTemp = TextEditGetRawData(Window->Accent3Edit,SYSTEMLINEFEED);
  1637.                         if (StringTemp == NIL)
  1638.                             {
  1639.                                 ErrorNoMemory = True;
  1640.                             }
  1641.                          else
  1642.                             {
  1643.                                 PutTrackObjectAccent3(TheTrackThing,
  1644.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1645.                                 ReleasePtr(StringTemp);
  1646.                             }
  1647.                     }
  1648.  
  1649.                 if (TextEditDoesItNeedToBeSaved(Window->Accent4Edit))
  1650.                     {
  1651.                         StringTemp = TextEditGetRawData(Window->Accent4Edit,SYSTEMLINEFEED);
  1652.                         if (StringTemp == NIL)
  1653.                             {
  1654.                                 ErrorNoMemory = True;
  1655.                             }
  1656.                          else
  1657.                             {
  1658.                                 PutTrackObjectAccent4(TheTrackThing,
  1659.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1660.                                 ReleasePtr(StringTemp);
  1661.                             }
  1662.                     }
  1663.  
  1664.                 if (TextEditDoesItNeedToBeSaved(Window->PitchDispRateEdit))
  1665.                     {
  1666.                         StringTemp = TextEditGetRawData(Window->PitchDispRateEdit,SYSTEMLINEFEED);
  1667.                         if (StringTemp == NIL)
  1668.                             {
  1669.                                 ErrorNoMemory = True;
  1670.                             }
  1671.                          else
  1672.                             {
  1673.                                 PutTrackObjectPitchDisplacementRateAdjust(TheTrackThing,
  1674.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1675.                                 ReleasePtr(StringTemp);
  1676.                             }
  1677.                     }
  1678.  
  1679.                 if (TextEditDoesItNeedToBeSaved(Window->PitchDispDepthEdit))
  1680.                     {
  1681.                         StringTemp = TextEditGetRawData(Window->PitchDispDepthEdit,SYSTEMLINEFEED);
  1682.                         if (StringTemp == NIL)
  1683.                             {
  1684.                                 ErrorNoMemory = True;
  1685.                             }
  1686.                          else
  1687.                             {
  1688.                                 PutTrackObjectPitchDisplacementDepthAdjust(TheTrackThing,
  1689.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1690.                                 ReleasePtr(StringTemp);
  1691.                             }
  1692.                     }
  1693.  
  1694.                 if (TextEditDoesItNeedToBeSaved(Window->HurryUpEdit))
  1695.                     {
  1696.                         StringTemp = TextEditGetRawData(Window->HurryUpEdit,SYSTEMLINEFEED);
  1697.                         if (StringTemp == NIL)
  1698.                             {
  1699.                                 ErrorNoMemory = True;
  1700.                             }
  1701.                          else
  1702.                             {
  1703.                                 PutTrackObjectHurryUp(TheTrackThing,
  1704.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1705.                                 ReleasePtr(StringTemp);
  1706.                             }
  1707.                     }
  1708.  
  1709.                 if (TextEditDoesItNeedToBeSaved(Window->PitchDispStartEdit))
  1710.                     {
  1711.                         StringTemp = TextEditGetRawData(Window->PitchDispStartEdit,SYSTEMLINEFEED);
  1712.                         if (StringTemp == NIL)
  1713.                             {
  1714.                                 ErrorNoMemory = True;
  1715.                             }
  1716.                          else
  1717.                             {
  1718.                                 PutTrackObjectPitchDisplacementStartPoint(TheTrackThing,
  1719.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1720.                                 ReleasePtr(StringTemp);
  1721.                             }
  1722.                     }
  1723.  
  1724.                 if (GetRadioButtonState(Window->PitchDispStartStartButton))
  1725.                     {
  1726.                         PutTrackObjectPitchDisplacementFromStartOrEnd(TheTrackThing,
  1727.                             ePitchDisplacementStartFromStart);
  1728.                     }
  1729.                 else if (GetRadioButtonState(Window->PitchDispStartEndButton))
  1730.                     {
  1731.                         PutTrackObjectPitchDisplacementFromStartOrEnd(TheTrackThing,
  1732.                             ePitchDisplacementStartFromEnd);
  1733.                     }
  1734.                 else
  1735.                     {
  1736.                         EXECUTE(PRERR(AllowResume,"TrackAttributeDialog:  pitch displacement "
  1737.                             "start/end radio buttons are in an inconsistent state"));
  1738.                     }
  1739.  
  1740.                 if (TextEditDoesItNeedToBeSaved(Window->DetuneEdit))
  1741.                     {
  1742.                         StringTemp = TextEditGetRawData(Window->DetuneEdit,SYSTEMLINEFEED);
  1743.                         if (StringTemp == NIL)
  1744.                             {
  1745.                                 ErrorNoMemory = True;
  1746.                             }
  1747.                          else
  1748.                             {
  1749.                                 PutTrackObjectDetune(TheTrackThing,
  1750.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1751.                                 ReleasePtr(StringTemp);
  1752.                             }
  1753.                     }
  1754.  
  1755.                 if (GetRadioButtonState(Window->DetuneHertzButton))
  1756.                     {
  1757.                         PutTrackObjectDetuneControlFlag(TheTrackThing,eDetuningModeHertz);
  1758.                     }
  1759.                 else if (GetRadioButtonState(Window->DetuneHalfStepButton))
  1760.                     {
  1761.                         PutTrackObjectDetuneControlFlag(TheTrackThing,eDetuningModeHalfSteps);
  1762.                     }
  1763.                 else
  1764.                     {
  1765.                         EXECUTE(PRERR(AllowResume,"TrackAttributeDialog:  detune conversion mode "
  1766.                             "radio buttons are in an inconsistent state"));
  1767.                     }
  1768.  
  1769.                 if (TextEditDoesItNeedToBeSaved(Window->StereoPositionEdit))
  1770.                     {
  1771.                         StringTemp = TextEditGetRawData(Window->StereoPositionEdit,SYSTEMLINEFEED);
  1772.                         if (StringTemp == NIL)
  1773.                             {
  1774.                                 ErrorNoMemory = True;
  1775.                             }
  1776.                          else
  1777.                             {
  1778.                                 PutTrackObjectStereoPositioning(TheTrackThing,
  1779.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1780.                                 ReleasePtr(StringTemp);
  1781.                             }
  1782.                     }
  1783.  
  1784.                 if (TextEditDoesItNeedToBeSaved(Window->SurroundEdit))
  1785.                     {
  1786.                         StringTemp = TextEditGetRawData(Window->SurroundEdit,SYSTEMLINEFEED);
  1787.                         if (StringTemp == NIL)
  1788.                             {
  1789.                                 ErrorNoMemory = True;
  1790.                             }
  1791.                          else
  1792.                             {
  1793.                                 PutTrackObjectSurroundPositioning(TheTrackThing,
  1794.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1795.                                 ReleasePtr(StringTemp);
  1796.                             }
  1797.                     }
  1798.  
  1799.                 if (TextEditDoesItNeedToBeSaved(Window->DurationEdit))
  1800.                     {
  1801.                         StringTemp = TextEditGetRawData(Window->DurationEdit,SYSTEMLINEFEED);
  1802.                         if (StringTemp == NIL)
  1803.                             {
  1804.                                 ErrorNoMemory = True;
  1805.                             }
  1806.                          else
  1807.                             {
  1808.                                 PutTrackObjectDurationAdjust(TheTrackThing,
  1809.                                     StringToLongDouble(StringTemp,PtrSize(StringTemp)));
  1810.                                 ReleasePtr(StringTemp);
  1811.                             }
  1812.                     }
  1813.  
  1814.                 if (GetRadioButtonState(Window->DurationAddButton))
  1815.                     {
  1816.                         PutTrackObjectDurationModeFlag(TheTrackThing,eDurationAdjustAdditive);
  1817.                     }
  1818.                 else if (GetRadioButtonState(Window->DurationMultButton))
  1819.                     {
  1820.                         PutTrackObjectDurationModeFlag(TheTrackThing,eDurationAdjustMultiplicative);
  1821.                     }
  1822.                 else
  1823.                     {
  1824.                         EXECUTE(PRERR(AllowResume,"TrackAttributeDialog:  duration mode "
  1825.                             "radio buttons are in an inconsistent state"));
  1826.                     }
  1827.  
  1828.                 if (ErrorNoMemory)
  1829.                     {
  1830.                         AlertHalt("There was not enough memory to save all of the attributes.",NIL);
  1831.                     }
  1832.             }
  1833.  
  1834.         DisposeSimpleButton(Window->OKButton);
  1835.         DisposeSimpleButton(Window->CancelButton);
  1836.         DisposeTextEdit(Window->NameEdit);
  1837.         DisposeTextEdit(Window->InstrumentEdit);
  1838.         DisposeTextEdit(Window->EarlyLateAdjustEdit);
  1839.         DisposeTextEdit(Window->ReleasePoint1Edit);
  1840.         DisposeRadioButton(Window->ReleasePoint1StartButton);
  1841.         DisposeRadioButton(Window->ReleasePoint1EndButton);
  1842.         DisposeTextEdit(Window->LoudnessEdit);
  1843.         DisposeTextEdit(Window->ReleasePoint2Edit);
  1844.         DisposeRadioButton(Window->ReleasePoint2StartButton);
  1845.         DisposeRadioButton(Window->ReleasePoint2EndButton);
  1846.         DisposeTextEdit(Window->Accent1Edit);
  1847.         DisposeTextEdit(Window->Accent2Edit);
  1848.         DisposeTextEdit(Window->Accent3Edit);
  1849.         DisposeTextEdit(Window->Accent4Edit);
  1850.         DisposeTextEdit(Window->PitchDispRateEdit);
  1851.         DisposeTextEdit(Window->PitchDispDepthEdit);
  1852.         DisposeTextEdit(Window->HurryUpEdit);
  1853.         DisposeTextEdit(Window->PitchDispStartEdit);
  1854.         DisposeRadioButton(Window->PitchDispStartStartButton);
  1855.         DisposeRadioButton(Window->PitchDispStartEndButton);
  1856.         DisposeTextEdit(Window->StereoPositionEdit);
  1857.         DisposeTextEdit(Window->SurroundEdit);
  1858.         DisposeTextEdit(Window->DetuneEdit);
  1859.         DisposeRadioButton(Window->DetuneHertzButton);
  1860.         DisposeRadioButton(Window->DetuneHalfStepButton);
  1861.         DisposeTextEdit(Window->DurationEdit);
  1862.         DisposeRadioButton(Window->DurationAddButton);
  1863.         DisposeRadioButton(Window->DurationMultButton);
  1864.         KillWindow(Window->ScreenID);
  1865.         ReleasePtr((char*)Window);
  1866.         /* no return value */
  1867.     }
  1868.